home *** CD-ROM | disk | FTP | other *** search
Oberon Document | 1994-06-07 | 7.9 KB | 217 lines | [oODC/obnF] |
- Documents.StdDocumentDesc
- Documents.DocumentDesc
- Containers.ViewDesc
- Views.ViewDesc
- Stores.StoreDesc
- Documents.ModelDesc
- Containers.ModelDesc
- Models.ModelDesc
- Stores.ElemDesc
- TextViews.StdViewDesc
- TextViews.ViewDesc
- TextModels.StdModelDesc
- TextModels.ModelDesc
- TextModels.AttributesDesc
- Geneva
- Geneva
- StdStamps.StdViewDesc
- Geneva
- MODULE FormCmds;
- (* OmInc
- IMPORT
- Domains, Ports, Models, Views, Controllers, Properties, Dialog, Containers,
- Controls, FormModels, FormViews, FormControllers;
- CONST
- left = 0; top = 1; right = 2; bottom = 3; row = 4; column = 5;
- minW = 20 * Ports.mm; minH = 5 * Ports.mm;
- maxW = 200 * Ports.mm; maxH = 50 * Ports.mm;
- PROCEDURE FindExtrema (c: FormControllers.Controller; VAR l, t, r, b, h, v: LONGINT;
- VAR s: FormControllers.List);
- VAR n: INTEGER; p: FormControllers. List; q: FormModels.Reader; w: Views.View;
- BEGIN (* there is at least one view selected *)
- l := MAX(LONGINT); t := MAX(LONGINT); r := MIN(LONGINT); b := MIN(LONGINT);
- h := 0; v := 0; n := 0; s := NIL;
- q := c.form.NewReader(NIL); q.Set(NIL); q.ReadView(w);
- WHILE w # NIL DO
- IF c.IsSelected(w) THEN
- INC(h, q.l); INC(h, q.r); INC(v, q.t); INC(v, q.b); INC(n, 2);
- NEW(p); p.next := s; s := p; p.view := w;
- IF q.l < l THEN l := q.l END;
- IF q.t < t THEN t := q.t END;
- IF q.r > r THEN r := q.r END;
- IF q.b > b THEN b := q.b END
- END;
- q.ReadView(w)
- END;
- h := h DIV n; v := v DIV n
- END FindExtrema;
- PROCEDURE Move (c: FormControllers.Controller; s: FormControllers. List; p: LONGINT;
- side: INTEGER; name: Domains.OpName);
- VAR script: Domains.Operation; dx, dy: LONGINT; l, t, r, b: LONGINT; h: FormControllers.List;
- BEGIN
- h := s;
- Views.BeginScript(c.view, name, script);
- WHILE s # NIL DO
- FormModels.GetRect(s.view, l, t, r, b);
- IF side = left THEN dx := p - l; dy := 0
- ELSIF side = top THEN dx := 0; dy := p - t
- ELSIF side = right THEN dx := p - r; dy := 0
- ELSIF side = bottom THEN dx := 0; dy := p - b
- ELSIF side = row THEN dx := 0; dy := p - (t + b) DIV 2
- ELSIF side = column THEN dx := p - (l + r) DIV 2; dy := 0
- END;
- FormViews.RoundToGrid(c.ThisView(), dx, dy);
- c.form.Move(s.view, dx, dy);
- s := s.next
- END;
- Views.EndScript(c.view, script);
- WHILE h # NIL DO c.Select(h.view); h := h.next END
- END Move;
- PROCEDURE AlignLeft*;
- VAR c: FormControllers.Controller; l, t, r, b, h, v: LONGINT; s: FormControllers.List;
- BEGIN
- c := FormControllers.Focus();
- IF (c # NIL) & c.HasSelection() THEN
- FindExtrema(c, l, t, r, b, h, v, s); Move(c, s, l, left, "#Form:AlignLeft")
- ELSE Dialog.ShowMsg("no focus or no selection")
- END
- END AlignLeft;
- PROCEDURE AlignRight*;
- VAR c: FormControllers.Controller; l, t, r, b, h, v: LONGINT; s: FormControllers.List;
- BEGIN
- c := FormControllers.Focus();
- IF (c # NIL) & c.HasSelection() THEN
- FindExtrema(c, l, t, r, b, h, v, s); Move(c, s, r, right, "#Form:AlignRight")
- ELSE Dialog.ShowMsg("no focus or no selection")
- END
- END AlignRight;
- PROCEDURE AlignTop*;
- VAR c: FormControllers.Controller; l, t, r, b, h, v: LONGINT; s: FormControllers.List;
- BEGIN
- c := FormControllers.Focus();
- IF (c # NIL) & c.HasSelection() THEN
- FindExtrema(c, l, t, r, b, h, v, s); Move(c, s, t, top, "#Form:AlignTop")
- ELSE Dialog.ShowMsg("no focus or no selection")
- END
- END AlignTop;
- PROCEDURE AlignBottom*;
- VAR c: FormControllers.Controller; l, t, r, b, h, v: LONGINT; s: FormControllers.List;
- BEGIN
- c := FormControllers.Focus();
- IF (c # NIL) & c.HasSelection() THEN
- FindExtrema(c, l, t, r, b, h, v, s); Move(c, s, b, bottom, "#Form:AlignBottom")
- ELSE Dialog.ShowMsg("no focus or no selection")
- END
- END AlignBottom;
- PROCEDURE AlignToRow*;
- VAR c: FormControllers.Controller; l, t, r, b, h, v: LONGINT; s: FormControllers.List;
- BEGIN
- c := FormControllers.Focus();
- IF (c # NIL) & c.HasSelection() THEN
- FindExtrema(c, l, t, r, b, h, v, s); Move(c, s, v, row, "#Form:AlignHorizontal")
- ELSE Dialog.ShowMsg("no focus or no selection")
- END
- END AlignToRow;
- PROCEDURE AlignToColumn*;
- VAR c: FormControllers.Controller; l, t, r, b, h, v: LONGINT; s: FormControllers.List;
- BEGIN
- c := FormControllers.Focus();
- IF (c # NIL) & c.HasSelection() THEN
- FindExtrema(c, l, t, r, b, h, v, s); Move(c, s, h, column, "#Form:AlignVertical")
- ELSE Dialog.ShowMsg("no focus or no selection")
- END
- END AlignToColumn;
- PROCEDURE SelectOffGridViews*;
- VAR c: FormControllers.Controller; v: Views.View; h: FormModels.Reader;
- l, t, r, b, l0, t0: LONGINT;
- BEGIN
- c := FormControllers.Focus();
- IF c # NIL THEN
- c.SelectAll(FALSE);
- h := c.form.NewReader(NIL); h.Set(NIL);
- h.ReadView(v);
- WHILE v # NIL DO
- FormModels.GetRect(v, l, t, r, b); l0 := l; t0 := t;
- FormViews.RoundToGrid(c.view, l0, t0);
- IF (l0 # l) OR (t0 # t) THEN c.Select(v) END;
- h.ReadView(v)
- END
- END
- END SelectOffGridViews;
- PROCEDURE Selection (c: FormControllers.Controller): FormControllers.List;
- VAR p, q: FormControllers. List; h: FormModels.Reader; v: Views.View;
- BEGIN
- p := NIL;
- h := c.form.NewReader(NIL); h.Set(NIL); h.ReadView(v);
- WHILE v # NIL DO
- IF c.IsSelected(v) THEN NEW(q); q.next := p; p := q; q.view := v END;
- h.ReadView(v)
- END;
- RETURN p
- END Selection;
- PROCEDURE ForceToGrid*;
- VAR c: FormControllers.Controller;
- l, t, r, b, l0, t0: LONGINT; sel, sel0: FormControllers.List; s: Domains.Operation;
- BEGIN
- c := FormControllers.Focus();
- IF (c # NIL) & c.HasSelection() THEN
- Views.BeginScript(c.view, "#Form:ForceToGrid", s);
- sel := Selection(c); sel0 := sel;
- WHILE sel # NIL DO
- FormModels.GetRect(sel.view, l, t, r, b); l0 := l; t0 := t;
- FormViews.RoundToGrid(c.view, l0, t0);
- c.form.Move(sel.view, l0 - l, t0 - t);
- sel := sel.next
- END;
- Views.EndScript(c.view, s);
- WHILE sel0 # NIL DO c.Select(sel0.view); sel0 := sel0.next END
- END
- END ForceToGrid;
- PROCEDURE DuplicateView*;
- VAR c: FormControllers.Controller; v, h: Views.View; l, t, r, b, d: LONGINT;
- BEGIN
- c := FormControllers.Focus();
- IF c # NIL THEN
- v := c.Singleton();
- IF v # NIL THEN
- FormModels.GetRect(v, l, t, r, b);
- h := Views.CopyOf(v, Views.deep);
- d := c.view.grid * c.view.gridFactor;
- c.form.Insert(h, l + d, t + d, r + d, b + d);
- c.Select(h)
- END
- END
- END DuplicateView;
- (** standard form-related guards **)
- PROCEDURE FocusGuard*;
- (** in non-FormView menus; otherwise implied by menu type **)
- BEGIN
- IF FormViews.Focus() = NIL THEN Dialog.Disable END
- END FocusGuard;
- PROCEDURE SelectionGuard*;
- (** in non-FormView menus; otherwise use "SelectionGuard" **)
- VAR c: FormControllers.Controller;
- BEGIN
- c := FormControllers.Focus();
- IF (c = NIL) OR ~c.HasSelection() THEN Dialog.Disable END
- END SelectionGuard;
- PROCEDURE SingletonGuard*;
- (** in non-FormView menus; otherwise use "SingletonGuard" **)
- VAR c: FormControllers.Controller;
- BEGIN
- c := FormControllers.Focus();
- IF (c = NIL) OR (c.Singleton() = NIL) THEN Dialog.Disable END
- END SingletonGuard;
- END FormCmds.
- TextControllers.StdCtrlDesc
- TextControllers.ControllerDesc
- Containers.ControllerDesc
- Controllers.ControllerDesc
- TextRulers.StdRulerDesc
- TextRulers.RulerDesc
- TextRulers.StdStyleDesc
- TextRulers.StyleDesc
- TextRulers.AttributesDesc
- Geneva
- Documents.ControllerDesc
-